PROCESO DE INSTALACIÓN Y CONFIGURACIÓN


Requisitos previos¶

- Cuenta activa en GitLab: https://gitlab.com/¶

- Sistema de control de versiones GIT:¶

  • Windows: instalador
  • Linux: sudo apt install git
  • Mac: brew install git

    Nota: Si es primera ves que instala git se deberá configurar las variables globales como se indica a continuación:

    • git config --global user.name "userName"

      Advertencia: Reemplaze userName por su nombre de usuario registrado en GitLab.

    • git config --global user.email "userEmail"

      Advertencia: Reemplaze userEmail por su email registrado en GitLab.

- POSTGRESQL¶

  • Windows: guía
  • Linux: sudo apt-get install postgresql
  • Mac: brew install postgresql

- VIRTUALENV¶

  • Windows: pip install virtualenv
  • Linux: sudo apt install python3-virtualenv
  • Mac: guía

INSTALACIÓN¶

  • POSTGRESQL

    1. Abrir el terminal e ingresar como super usuario: sudo su postgres
    2. Ingresar a la consola de postgreSQL: psql

    image-2.png

    1. Crear el usuario developer: CREATE USER developer WITH PASSWORD 'secreto';

    image-3.png

    1. Crear la base de datos con el nombre strategrisk: CREATE DATABASE strategrisk;

    image-4.png


  • REQUERIMIENTOS

    1. Crear un entorno virtual: virtualenv nombreEntorno -p python3

    image-6.png

    1. Activar el entorno virtual: source nombreEntorno/bin/activate

    image-7.png

    1. Abrir el siguiente enlace: https://gitlab.com/CarlosCastillo10/strategrisk

    2. Realizar un Fork al repositorio base

    image-18.png

    1. Copiar el enlace del nuevo Fork creado.

    image-19.png

    1. Clonar el respositorio: git clone enlaceCopiado

    image-11.png

    1. Ingresar al repositorio clonado (cd strategrisk)e instalar los requerimientos: pip install -r requirements/prod.txt

    image-12.png


  • CONFIGURACIÓN Y CARGA DE DATOS

    1. Activar la configuración: . configuration.sh

    image-13.png

    1. Crear las tablas de la base de datos: flask db upgrade

    image-14.png

    1. Descargar el archivo de datos de respaldo: data.sql

    2. Cargar los datos de respaldo (data.sql):

      4.1 Ingresar como super usuario a postgress: sudo su postgres

      4.2 Ubicarse en el directorio donde se haya descargado el archivo data.sql.

      4.3 Cargar los datos: psql -d strategrisk -f data.sql

    image-15.png

PROCESO DE USO Y DESARROLLO

Preparación del entorno de desarrollo.¶

Nota: Es necesario tener activado el entorno virtual

  1. Instalar jupyter notebook: pip install jupyter (Realizarlo si es que no se encuentra instalado)
  2. Activar la configuración . configuration.sh (Revisar paso 1 de CONFIGURACIÓN Y CARGA DE DATOS)
  3. Levantar jupyter notebook: jupyter notebook y deberá ver una imagen como la siguiente:

    image.png


OBTENCIÓN DE DATOS¶

Importar librerias¶

In [1]:
from sqlalchemy import create_engine
from sqlalchemy import MetaData, Table
from sqlalchemy.pool import NullPool
import pandas as pd
import plotly.graph_objs as go

Método de conexión y obtención de información de la base de datos¶

In [2]:
def df_liquidez():

    engine = create_engine('postgresql://developer:secreto@localhost:5432/strategrisk', poolclass=NullPool)
    connection = engine.connect() # Conectarse con la base de datos

    table_names = engine.table_names()
    metadata = MetaData()

    company = Table('company',metadata,autoload = True, autoload_with=engine)
    r_company = connection.execute("SELECT * FROM company").fetchall()
    df_co = pd.DataFrame(r_company, columns =company.columns.keys())
    new_row = {'taxpayer_id':'SEPS-1-1','name':'SEPS-1-1', 'nickname':'SEPS-1-1','load_col':None}
    df_co = df_co.append(new_row,ignore_index=True)

    ind = Table('indicator',metadata,autoload = True, autoload_with=engine)
    r_ind = connection.execute("SELECT * FROM indicator").fetchall()
    df_ind = pd.DataFrame(r_ind, columns =ind.columns.keys())
    
    fin_ind = Table('financialindicator',metadata,autoload = True, autoload_with=engine)
    r_fin_ind = connection.execute("SELECT * FROM financialindicator").fetchall()
    df_fin_ind = pd.DataFrame(r_fin_ind, columns =fin_ind.columns.keys())

    threshold = Table('threshold',metadata,autoload = True, autoload_with=engine)
    r_umb = connection.execute("SELECT * FROM threshold").fetchall()
    df_umb = pd.DataFrame(r_umb, columns = threshold.columns.keys())

    fin_sta = Table('financialstate',metadata,autoload = True, autoload_with=engine)
    r_fin_sta = connection.execute("""SELECT * FROM financialstate 
                                    WHERE account_code 
                                    IN ('1304','1302','11','1303','1301','14','1499','1925',
                                        '2904','2903','27','26','24','23','2105',
                                        '2103','2102','2101',
                                        '21',
                                        '2104','2103','2102','2101',
                                        '210155','210150','210145','210140','210135','210131','210131','210130',
                                        '210305','210310','210315','210320','210325','210330','4101')
                                    """).fetchall()
    df_fin_sta = pd.DataFrame(r_fin_sta, columns =fin_sta.columns.keys())

    evaluationtext = Table('evaluationtext',metadata,autoload = True, autoload_with=engine)
    r_msgs = connection.execute("SELECT * FROM evaluationtext").fetchall()
    df_evaltxt = pd.DataFrame(r_msgs, columns = evaluationtext.columns.keys())

    connection.close() # Cerrar la conexión

    df = df_co.merge(df_fin_ind,left_on='taxpayer_id',right_on='company_taxpayer_id')
    df_pt = df_fin_ind.pivot_table(index=['company_taxpayer_id','year','month'],values='value',columns=['indicator_code'])
    df_pt_finsta = df_fin_sta.pivot_table(index = ['company_taxpayer_id','year','month'],values = 'value',columns=['account_code'])

    return df_co,df_pt,df_umb,df_pt_finsta, df_evaltxt, df_ind

Extracción de información¶

In [3]:
df_co, df_liq, df_umb, df_finsta, df_evaltxt, df_indicators = df_liquidez()
df_co.head(5)
Out[3]:
taxpayer_id name nickname load_col
0 1390013678001 15 DE ABRIL LTDA 15 DE ABRIL None
1 1790093204001 23 DE JULIO LTDA 23 DE JULIO None
2 1790567699001 29 DE OCTUBRE LTDA 29 DE OCTUBRE None
3 1790501469001 ALIANZA DEL VALLE LTDA ALIANZA DEL VALLE None
4 1891709591001 AMBATO LTDA AMBATO None

DESARROLLO¶

Ejemplo de implementación¶

  • Obtener el top 15 de las mejores compañias con Activos Líquidos en el año 2020 del mes de Enero.
In [4]:
df_g_liq = df_liq.copy().reset_index() # Crear una copia del dataframe de liquidez.

# Combinar los datos del dataframe de liquidez con el dataframe de compañias a través del campo relacional.
df_g_liq = df_co.merge(df_g_liq, left_on='taxpayer_id', right_on = 'company_taxpayer_id')
df_g_liq.drop(df_g_liq[df_g_liq.taxpayer_id == 'SEPS-1-1'].index, inplace=True)
In [5]:
# Identificar el código del indicador que hace referencia a los Activos Líquidos, en este caso es 'AL'
df_indicators.head(5)
Out[5]:
code name type component
0 AL activos liquidos agregacion LIQUIDEZ
1 DCP Depósitos a corto plazo agregacion LIQUIDEZ
2 IL inversiones liquidas agregacion LIQUIDEZ
3 LCP Liquidez de corto plazo razon LIQUIDEZ
4 LCPPRPS Líquidez de Corto Plazo Posición Relativa al p... comparativo LIQUIDEZ
In [6]:
'''
    * Obtener todos los datos del año 2020 del mes de Enero
    * Ordenar el dataframe a través del indicador hace referencia a los Activos Líquidos(AL) 
    de forma que se ordenen los valores mas altos primero, es decir de manera descendente.
    * Obtener el top 15 de las mejores compañias con Activos Líquidos.
'''
df_top = df_g_liq[(df_g_liq.year == 2020) & (df_g_liq.month == 1)].sort_values(by = 'AL', ascending = False)[:15]
In [7]:
graph = go.Bar(
    x = df_top['nickname'],
    y = df_top['AL'],
    text= df_top['AL'],
    textposition = 'inside',
    texttemplate='%{text:,.1f}',
    hovertemplate = 'Compañia: %{x}<br>Activos Líquidos: %{y:,.2f}, <extra></extra>'
)

figure = {
    'data': graph,
    'layout': {
        'title': 'Top 15 de las mejores compañias con Activos Líquidos en el año 2020 del mes de Enero',
        'yaxis': {
            'title': 'Activos Líquidos'
        }
    }
}

figure = go.Figure(figure)
figure.show()